package com.lagou.handler;

import com.lagou.service.UserServiceImpl;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.concurrent.EventExecutorGroup;

import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 自定义的业务处理器
 */
public class UserServiceHandler extends ChannelInboundHandlerAdapter  {

    //当客户端读取数据时,该方法会被调用
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

        //注意:  客户端将来发送请求的时候会传递一个参数:  UserService#sayHello#are you ok
         //1.判断当前的请求是否符合规则
        // 判断是否符合约定，符合则调用本地方法，返回数据
        if (msg instanceof RpcRequest) {
            // 获取消息对象
            RpcRequest request = (RpcRequest) msg;
            // 获取服务类名
            String className = request.getClassName();
            // 获取服务方法名
            String methodName = request.getMethodName();
            // 按Bean名约定，将类名首字母转小写，得到Bean名
            String beanName = className.substring(0, 1).toLowerCase() + className.substring(1);
            // 获取Bean对象
            // 获取方法
//            Method method = serviceBean.getClass().getMethod(methodName, request.getParameterTypes());
//            // 调用方法
            String s = new UserServiceImpl().sayHello(request.getParameters().toString());
//            Object result = method.invoke(serviceBean, request.getParameters());
            // 向Client输出结果 "success"
            ctx.writeAndFlush(s);
        }

    }
}
